package com.king.designpatterns.hybriddesignpattern.hybriddesignpattern.observingtheintermediarypatterns;

/**
 * 应用场景类
 *
 * 有一个产品具有多个触发事件，当它产生时触发一个创建事件，修改的时候触发修改事件，删除时触发删除事件。
 * 针对这种事件的触发以及处理，可以采用观察者模式和中介者模式的混合使用模式。
 *
 * 设计模式：
 *      ■ 工厂方法模式：负责生产、修改、克隆及销毁产品对象，实现了产品和工厂的耦合，避免产品随意被创建而无触发事件的情况发生。
 *      ■ 桥梁模式：在产品和事件两个对象的关系中采用了桥梁模式，以便两者可以自由地扩展，而不破坏其封装。
 *      ■ 观察者模式：事件分发类是观察者，用于注册事件处理者，当产生事件时通知事件处理者，并调用相应的事件处理方法。
 *      ■ 中介者模式：使用中介者对事件和处理者之间进行耦合。
 *
 * @author king
 * @date 2021-06-15 14:01
 */
public class Client {
    public static void main(String[] args) {
        // 获得事件分发类
        EventDispatch dispatch = EventDispatch.getEventDispatch();
        // 接受乞丐对事件的处理
        dispatch.registerCustomer(new Beggar());
        // 接受平民对事件的处理
        dispatch.registerCustomer(new Commoner());
        // 接受贵族对事件的处理
        dispatch.registerCustomer(new Nobleman());
        // 建立一个产品生产工厂
        ProductManager factory = new ProductManager();
        // 制造一个产品
        Product product = factory.createProduct("IBM笔记本电脑");
        // 修改一个产品
        factory.editProduct(product, "Dell笔记本电脑");
        // 克隆一个产品
        Product clone = factory.clone(product);
        // 销毁产品
        factory.abandonProduct(product);
    }
}
